package com.zhengxiang.onlinexamination.service;

import com.zhengxiang.onlinexamination.entity.LoginUser;
import io.jsonwebtoken.Claims;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

public interface TokenService {

    /**
     * 获取用户身份信息
     *
     * @return 用户信息
     */
    public LoginUser getLoginUser(HttpServletRequest request);
    /**
     * 设置用户身份信息
     */
    public void setLoginUser(LoginUser LoginUser);
    /**
     * 删除用户身份信息
     */
    public void delLoginUser(String token);
    /**
     * 创建令牌
     *
     * @param LoginUser 用户信息
     * @return 令牌
     */
    public String createToken(LoginUser LoginUser);
    /**
     * 验证令牌有效期，相差不足20分钟，自动刷新缓存
     *
     * @param LoginUser
     * @return 令牌
     */
    public void verifyToken(LoginUser LoginUser);
    /**
     * 刷新令牌有效期
     *
     * @param LoginUser 登录信息
     */
    public void refreshToken(LoginUser LoginUser);
    /**
     * 设置用户代理信息
     *
     * @param LoginUser 登录信息
     */
    public void setUserAgent(LoginUser LoginUser);
    /**
     * 从数据声明生成令牌
     *
     * @param claims 数据声明
     * @return 令牌
     */
    public String createToken(Map<String, Object> claims);
    /**
     * 从令牌中获取数据声明
     *
     * @param token 令牌
     * @return 数据声明
     */
    public Claims parseToken(String token);
    /**
     * 从令牌中获取用户名
     *
     * @param token 令牌
     * @return 用户名
     */
    public String getUsernameFromToken(String token);
    /**
     * 获取请求token
     *
     * @param request
     * @return token
     */
    public String getToken(HttpServletRequest request);

    public String getTokenKey(String uuid);
}
